package com.yang.refleciton;

/**
 * @author yds
 * @program java-annotation-and-reflection
 * @description 作为jvm的加载机制解释
 * @create 2020-10-12 09:09
 **/
public class JvmBuild {
    private static int num=0;
    static{
        num=2;
    }

    public static void main(String[] args) throws ClassNotFoundException {
        /*
         1.加载到内存，类加载器会产生一个在java.lang.class包下类对应的Class对象
         2.链接(将java的二进制代码合并到jvm的运行状态里)，链接结束后 num=0
         3 类的初始化 jvm会使用<clinit>(){
                               System.out.println("Parent类初始化");
                               num=300;
                               num=100;
                          }
           函数编译二进制代码
           结果完成m=100
         */
        //Parent p=new Parent();
        System.out.println("main类初始化");
        //主动引用
        //Child child = new Child();
        //反射也会主动引用
        Class.forName("com.yang.refleciton.Child");


    }


}
class Parent{
    static{
        System.out.println("Parent类初始化");
        num=300;
    }
    static int num=0;


    public Parent() {
        System.out.println("Parent类的无参构造器num===>"+num);
    }
}
class Child extends Parent{
    public static int num1=0;
    static{
        num1++;
        System.out.println("子类被加载");
    }
}